package service

import (
	"errors"
	"go-ecommerce/internal/model"
	"gorm.io/gorm"
)

// CreateRole 创建一个新角色
/*func CreateRole(db *gorm.DB, name string) error {
	// 检查是否存在同名角色
	var exist model.Role
	if err := db.Where("name = ?", name).First(&exist).Error; err == nil {
		return errors.New("角色名称已存在")
	}

	// 创建角色
	role := model.Role{Name: name}
	return db.Create(&role).Error
}*/

// 添加角色
func CreateRole(db *gorm.DB, name string) error {
	var exist model.Role
	if err := db.Where("name = ?", name).First(&exist).Error; err == nil {
		return errors.New("角色名称已存在")
	}
	// 创建角色
	role := model.Role{Name: name}
	return db.Create(&role).Error
}

func UpdateRole(db *gorm.DB, id uint64, name, description string) error {
	var role model.Role

	// 用新的变量做唯一性校验
	var exist model.Role
	// 判断是否存在重名（除当前 id 外）
	if err := db.Where("name = ? AND id <> ?", name, id).First(&exist).Error; err == nil {
		return errors.New("该角色已经存在！")
	} else if !errors.Is(err, gorm.ErrRecordNotFound) {
		return err
	}

	// 获取当前角色记录
	if err := db.First(&role, id).Error; err != nil {
		return errors.New("角色不存在！")
	}

	// 更新字段
	role.Name = name
	role.Description = description

	return db.Save(&role).Error
}

func GetRole(db *gorm.DB, id uint64) (model.Role, error) {
	var role model.Role
	if err := db.First(&role, id).Error; err != nil {
		return role, err
	}
	return role, nil
}

func DeleteRole(db *gorm.DB, id uint64) error {
	var role model.Role
	if err := db.First(&role, id).Error; err != nil {
		return err
	}
	return db.Delete(&role).Error
}

func GetAllRole(db *gorm.DB) ([]model.Role, error) {
	var roles []model.Role
	if err := db.Find(&roles).Error; err != nil {
		return roles, err
	}
	return roles, nil
}
